home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Meeting Pearls 1
/
Meeting Pearls Vol 1 (1994).iso
/
amok98-106
/
amok106
/
deskfinder
/
tooltypes.mod
< prev
next >
Wrap
Text File
|
1994-02-26
|
4KB
|
142 lines
(****************************************************************
:Program. ToolTypes.mod
:Contents. To get "ToolTypes" from the programm Icon or CLI-Line
:Author. Matthias Taube
:Copyright. PublicDomain
:Language. Oberon
:Translator. Oberon 3.00d
:History. 1.2 [Taube] 16-May-1993 fixed Bug using Icon.GetToolType (pointer odd)
1.1 [Taube] 02-May-1993 include Cli-Support
:Address. D-5000 Köln 40,Ricarda Huch Str. 8
:Phone. 02234/49233
:Remark. ONLY TESTET ON A3000 - KS/WB 37.x und KS/WB 39.x
*****************************************************************)
MODULE ToolTypes;
IMPORT Arguments, Conversions, Exec, Icon, OberonLib, Strings, SYSTEM, Workbench;
VAR wbs*:Workbench.WBStartupPtr;
MeinIcon*: Workbench.DiskObjectPtr;
PROCEDURE CopyStr(Von:ARRAY OF CHAR;VAR Nach:ARRAY OF CHAR;AbPos:INTEGER);
(* Kopiert einen String ab einer Position bis zum Ende in einen anderen String *)
VAR VonPos,NachPos:INTEGER;
BEGIN
VonPos:=AbPos;NachPos:=0;
WHILE (NachPos<LEN(Nach)) AND (Von[VonPos]#00X) DO
Nach[NachPos]:=Von[VonPos];
INC(NachPos);INC(VonPos);
END;
Nach[NachPos]:=00X;
END CopyStr;
PROCEDURE StripQuote(VAR String:ARRAY OF CHAR);
(* Entfernt die Anführungszeichen und die führenden und endenden Leerzeichen
aus einem String *)
VAR Pos:INTEGER;
Quote:CHAR;
BEGIN
Pos:=0;
(* führende Leerzeichen entfernen *)
WHILE (String[Pos]=" ") DO
INC(Pos);
END;
(* führendes Anführungszeichen entfernen *)
IF (String[Pos]="'") OR (String[Pos]='"') THEN
Quote:=String[Pos]; INC(Pos);
ELSE Quote:=" ";
END;
CopyStr(String,String,Pos);
Pos:=SHORT(Strings.Length(String));
WHILE ((String[Pos]=" ") OR (String[Pos]=00X)) AND (Pos>=0) DO
DEC(Pos);
END;
IF String[Pos]=Quote THEN DEC(Pos); END;
String[Pos+1]:=00X;
END StripQuote;
PROCEDURE GetToolRawStr* (Pattern:ARRAY OF CHAR;VAR in: Exec.STRING):BOOLEAN;
(* Liefert das Argument in der Variable in den String, so wie es in den ToolTypes
steht.
Beim Start vom Cli werden die Argumente nach dem String "Pattern=..."
durchsucht und danach String hinter dem Gleichheitszeichen ausgewertet. *)
VAR i:INTEGER;
Pos:LONGINT;
Ok:BOOLEAN;
Temp:Exec.LSTRPTR;
TempStr:Exec.STRING;
BEGIN
IF MeinIcon#NIL THEN
(* $OddChk- *)
Temp:=Icon.FindToolType(MeinIcon.toolTypes,Pattern);
IF Temp#NIL THEN
Exec.CopyMemAPTR(Temp,SYSTEM.ADR(in),SIZE(in));
RETURN(TRUE);
END;
(* $OddChk= *)
ELSE (* Programm hat kein Icon oder wurde über den Cli gestartet *)
IF NOT OberonLib.wbStarted THEN
i:=Arguments.NumArgs();
REPEAT
Arguments.GetArg(i,in);
TempStr:=in;
Strings.Upper(TempStr); (* Strings.UpperIntl enthält einen Bug! *)
Strings.Upper(Pattern);
Pos:=Strings.Occurs(TempStr,Pattern);
IF Pos = 0 THEN
Pos:=Strings.Length(Pattern);
IF TempStr[Pos]="=" THEN
CopyStr(in,in,SHORT(Pos)+1);
RETURN(TRUE);
END;
END;
DEC(i);
UNTIL (i<1);
END;
END;
in:="";
RETURN(FALSE);
END GetToolRawStr;
PROCEDURE GetToolString*(Pattern:ARRAY OF CHAR;VAR in:ARRAY OF CHAR):BOOLEAN;
(* von dem String hinter ToolType werden die Tüttelchen entfernt, er
wird in einen beliebigen String kopiert. *)
VAR TMPStr:Exec.STRING;
VonPos,NachPos:INTEGER;
BEGIN
IF GetToolRawStr(Pattern,TMPStr) THEN
StripQuote(TMPStr);
CopyStr(TMPStr,in,0);
RETURN(TRUE);
END;
in:="";
RETURN(FALSE);
END GetToolString;
PROCEDURE GetToolInt*(Pattern:ARRAY OF CHAR;Default:LONGINT):LONGINT;
(* Wertet Tools aus, die Integerargumente beinhalten *)
VAR Temp:Exec.STRING;
Aus:LONGINT;
BEGIN
IF GetToolString(Pattern,Temp) THEN
IF Conversions.StringToInt(Temp,Aus) THEN RETURN(Aus); END;
END;
RETURN(Default);
END GetToolInt;
BEGIN
IF OberonLib.wbStarted THEN
wbs := OberonLib.wbenchMsg; (* wird von Arguments nicht exportiert *)
MeinIcon := Icon.GetDiskObject(wbs.argList[0].name^);
ELSE MeinIcon:=NIL;wbs:=NIL;
END;
CLOSE
IF MeinIcon#NIL THEN Icon.FreeDiskObject(MeinIcon);END;
END ToolTypes.